#!/bin/bash

###########################
# 用于修复BC-Linux 22.10版本操作系统主要基线问题
# 作者：王文斌
# 时间：2023-12-15
# 版本：v1.0
###########################

# 设置文件属性 先移除只读属性，用于创建用户
chattr -i /etc/gshadow
chattr -i /etc/shadow
chattr -i /etc/group
chattr -i /etc/passwd

# 修改权限前，先创建一个远程用户，否则后面无法登陆
#useradd dict
#echo "Safe@2023QWOP" | passwd --stdin "dict" &> /dev/null
#passwd Safe@2023QWOP

user="dict"
        if id $user &> /dev/null
        then    
                echo "$user 已存在"
        else    
                useradd $user
                if [ $? -eq 0 ]
                then    
                        read -p "输入远程登陆用户dict密码: " password
                        echo password | passwd --stdin $user &> /dev/null
                else    
                        echo "用户创建失败"
                        exit
                fi      
        fi      

# 添加远程用户允许sudo操作
file_path="/etc/sudoers"
keyword="$user    ALL=(ALL)       ALL"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi



# 设置重要目录权限
chmod 750 /etc/rc.d/init.d
chmod 750 /tmp
chmod 750 /etc/rc5.d
chmod 750 /etc/rc4.d
chmod 750 /etc/rc0.d
chmod 750 /etc/rc6.d
chmod 750 /etc/rc2.d
chmod 750 /etc/rc1.d
chmod 750 /etc/rc3.d
chmod 600 /etc/security
chmod 644 /etc/group

#umask
#text="umask 022"
#file_path="/etc/bashr"
#echo "$text" >> $file_path

# 生效
#source /etc/bashrc

# 设置文件属性
#chattr +i /etc/gshadow
#chattr +i /etc/shadow
#chattr +i /etc/group
#chattr +i /etc/passwd


# 设置root用户禁止远程登录
# 禁止telnet root登陆
file_path="/etc/pam.d/login"
keyword="auth       required     pam_securetty.so"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi
# 禁止root远程登录
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd

# 设置命令行界面超时时间
file_path="/etc/profile"
keyword="export TMOUT=600"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

# 检查/etc/security/limits.conf是否设置* soft core 0  * hard core 0
file_path="/etc/security/limits.conf"
keyword="* soft core 0"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo "* soft core 0" >> $file_path
fi
keyword="* hard core 0"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo "* hard core 0" >> $file_path
fi

# 禁用CTRL+ALT+DEL
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
init q

# 检查历史命令设置
file_path="/etc/profile"
keyword="HISTFILESIZE=1000"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

# 检查是否配置账户认证失败次数限制
file_path="/etc/pam.d/system-auth"
keyword="auth required pam_faillock.so preauth audit deny=5 unlock_time=600 no_lock_time"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

keyword="account     required      pam_faillock.so"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

#检查是否配置SSH方式账户认证失败次数限制
file_path="/etc/pam.d/sshd"
keyword="auth required pam_faillock.so preauth audit deny=5 unlock_time=600 no_lock_time"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi
keyword="account required pam_faillock.so"
if grep -q "$keyword" "$file_path"; then
    echo "文件 $file_path 中存在关键字 $keyword"
else
    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
    echo $keyword >> $file_path
fi

# 检查是否限制远程登录IP范围
# 待定

# 检查是否配置关闭IP伪装  linux7.5不再支持nospoof命令了
#file_path="/etc/host.conf"
#keyword="nospoof on"
#if grep -q "$keyword" "$file_path"; then
#    echo "文件 $file_path 中存在关键字 $keyword"
#else
#    echo "文件 $file_path 中不存在关键字 $keyword 执行插入"
#    echo $keyword >> $file_path
#fi



